﻿using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Xml;

namespace Egora.Pvp
{
  public class PvpAuthentication : PvpValueBase
  {
    public PvpAuthentication()
    {
    }

    public PvpAuthentication(NameValueCollection values)
      : base(values)
    {
    }

    public static Dictionary<string, string> HttpSoapMapping = new Dictionary<string, string>()
    {
      {PvpIdentifier.X_AUTHENTICATE_UserId, "userId"},
      {PvpIdentifier.X_AUTHENTICATE_cn, "cn"},
      {PvpIdentifier.X_AUTHENTICATE_gvOuId, "gvOuId"},
      {PvpIdentifier.X_AUTHENTICATE_Ou, "ou"},
      {PvpIdentifier.X_AUTHENTICATE_gvOuOKZ, "gvOuOKZ"},
      {PvpIdentifier.X_AUTHENTICATE_mail, "mail"},
      {PvpIdentifier.X_AUTHENTICATE_tel, "tel"},
      {PvpIdentifier.X_AUTHENTICATE_gvSecClass, "gvSecClass"},
      {PvpIdentifier.X_AUTHENTICATE_gvGid,"gvGid"},
      {PvpIdentifier.X_AUTHENTICATE_gvFunction, "gvFunction"}
    };

    public string X_AUTHENTICATE_UserId
    {
      get { return GetValue(PvpIdentifier.X_AUTHENTICATE_UserId); }
      set { SetValue(PvpIdentifier.X_AUTHENTICATE_UserId, value); }
    }

    public string X_AUTHENTICATE_cn
    {
      get { return GetValue(PvpIdentifier.X_AUTHENTICATE_cn); }
      set { SetValue(PvpIdentifier.X_AUTHENTICATE_cn, value); }
    }
    public string X_AUTHENTICATE_mail
    {
      get { return GetValue(PvpIdentifier.X_AUTHENTICATE_mail); }
      set { SetValue(PvpIdentifier.X_AUTHENTICATE_mail, value); }
    }
    public string X_AUTHENTICATE_gvGid
    {
      get { return GetValue(PvpIdentifier.X_AUTHENTICATE_gvGid); }
      set { SetValue(PvpIdentifier.X_AUTHENTICATE_gvGid, value); }
    }
    public string X_AUTHENTICATE_gvOuId
    {
      get { return GetValue(PvpIdentifier.X_AUTHENTICATE_gvOuId); }
      set { SetValue(PvpIdentifier.X_AUTHENTICATE_gvOuId, value); }
    }
    public string X_AUTHENTICATE_gvOuDomain
    {
      get { return GetValue(PvpIdentifier.X_AUTHENTICATE_gvOuDomain); }
      set { SetValue(PvpIdentifier.X_AUTHENTICATE_gvOuDomain, value); }
    }
    public string X_AUTHENTICATE_Ou
    {
      get { return GetValue(PvpIdentifier.X_AUTHENTICATE_Ou); }
      set { SetValue(PvpIdentifier.X_AUTHENTICATE_Ou, value); }
    }
    public string X_AUTHENTICATE_gvOuOKZ
    {
      get { return GetValue(PvpIdentifier.X_AUTHENTICATE_gvOuOKZ); }
      set { SetValue(PvpIdentifier.X_AUTHENTICATE_gvOuOKZ, value); }
    }
    public string X_AUTHENTICATE_gvFunction
    {
      get { return GetValue(PvpIdentifier.X_AUTHENTICATE_gvFunction); }
      set { SetValue(PvpIdentifier.X_AUTHENTICATE_gvFunction, value); }
    }
    public string X_AUTHENTICATE_tel
    {
      get { return GetValue(PvpIdentifier.X_AUTHENTICATE_tel); }
      set { SetValue(PvpIdentifier.X_AUTHENTICATE_tel, value); }
    }
    public string X_AUTHENTICATE_gvSecClass
    {
      get { return GetValue(PvpIdentifier.X_AUTHENTICATE_gvSecClass); }
      set { SetValue(PvpIdentifier.X_AUTHENTICATE_gvSecClass, value); }
    }

    public string GetSoapUserPrincipalFragment()
    {
      StringBuilder s = new StringBuilder();
      s.AppendLine("<userPrincipal>");
      foreach (string name in HttpSoapMapping.Keys)
      {
        string v = GetValue(name);
        if (v != null)
        {
          s.Append("<").Append(HttpSoapMapping[name]).Append(">");
          s.Append(EncodingUtil.XmlEncode(v));
          s.Append("</").Append(HttpSoapMapping[name]).AppendLine(">");
        }
      }
      s.AppendLine("</userPrincipal>");
      return s.ToString();
    }
  }
}
